
package com.gitee.sop.layui.adminserver.module.background.admin.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gitee.sop.layui.adminserver.module.background.admin.entity.SysMenuRole;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author: admin
 * @date: 2019-11-14
 * @version: 1.0.0
 */
public interface SysMenuRoleMapper extends BaseMapper<SysMenuRole> {

    /**
     * 查询用户创建和关联的所有角色信息
     *
     * @param appId       应用id
     * @param creatorUuid 用户uuid
     * @param status      状态
     * @return
     */
    List<SysMenuRole> selectAllByCreatorUuid(@Param("appId") String appId, @Param("creatorUuid") String creatorUuid, @Param("status") Integer status);

    /**
     * 查询指定uuid的菜单角色新学年
     *
     * @param uuid
     * @return
     */
    SysMenuRole selectOneByUuid(@Param("uuid") String uuid);


    /**
     * 查询用户的所有角色信息
     *
     * @param appId    应用id
     * @param userUuid 用户uuid
     * @return
     */
    List<String> selectRoleNameByUserUuid(@Param("appId") String appId, @Param("userUuid") String userUuid);

    /**
     * 删除指定uuid的数据
     *
     * @param appId    应用id
     * @param uuidList uuid列表
     */
    void deleteBatchByUuids(@Param("appId") String appId, @Param("uuidList") List<String> uuidList);

    /**
     * 获取指定id的信息
     *
     * @param appId  应用id
     * @param idList id列表
     * @return
     */
    List<SysMenuRole> selectListByIds(@Param("appId") String appId, @Param("idList") List<Integer> idList);

    /**
     * 获取指定条件的菜单角色
     *
     * @param appId                  应用id
     * @param treeGroup              树分组
     * @param treeLeftTraverseNumber 树左遍历序号
     * @return
     */
    SysMenuRole selectOneBy(@Param("appId") String appId, @Param("treeGroup") String treeGroup, @Param("treeLeftTraverseNumber") Integer treeLeftTraverseNumber);

    /**
     * 更新所有子菜单角色状态
     *
     * @param treeGroup              树分组
     * @param treeLevel              树层级
     * @param treeLeftTraverseNumber 树左遍历序号
     * @param status                 状态
     * @return
     */
    void updateStatusForChildren(@Param("treeGroup") String treeGroup, @Param("treeLevel") int treeLevel, @Param("treeLeftTraverseNumber") int treeLeftTraverseNumber, @Param("status") int status);

    /**
     * 在插入节点前，更新插入节点后，树的节点变化情况
     *
     * @param treeGroup              插入节点的根节点树分组
     * @param treeLeftTraverseNumber 插入节点的根节点树左遍历序号
     */
    void updateTreeInfoAtInsert(@Param("treeGroup") String treeGroup, @Param("treeLeftTraverseNumber") int treeLeftTraverseNumber);

    /**
     * 在删除节点前，更新删除节点后，树的节点变化情况
     *
     * @param treeGroup              删除节点根节点节点树分组
     * @param treeLeftTraverseNumber 删除节点根节点树左遍历序号
     * @param count                  删除节点个数
     */
    void updateTreeInfoAtDelete(@Param("treeGroup") String treeGroup, @Param("treeLeftTraverseNumber") int treeLeftTraverseNumber, @Param("count") int count);

    /**
     * 查询指定树分组，指定层级，指定遍历序号的所有子节点
     *
     * @param treeGroup              树分组
     * @param treeLevel              树层级
     * @param treeLeftTraverseNumber 树左遍历序号
     * @return
     */
    List<SysMenuRole> selectChildListTreeBy(@Param("treeGroup") String treeGroup, @Param("treeLevel") int treeLevel, @Param("treeLeftTraverseNumber") int treeLeftTraverseNumber);

    /**
     * 查询指定应用的菜单角色信息
     *
     * @param appId 应用id
     * @return
     */
    List<SysMenuRole> selectByAppId(@Param("appId") String appId);
}
